import time
import redis

def list_item(conn,itemid,sellerid,price):
    inventory="inventory:%s"%sellerid
    item="%s.%s"%(itemid,sellerid)
    end=time.time()+5
    pipe=conn.pipeline()

    while time.time()<end:
        try:
            #监视用户包裹发生的变化
            pipe.watch(inventory)
            #检查用户是否仍然持有将要被销售的商品
            if not pipe.sismember(inventory,itemid):
                pipe.unwatch()
                #如果指定的商品不在用户的包裹里面，那么停止对包裹键的监视并返回一个空值
                return None
            #把被销售的商品添加到商品买卖市场里面
            pipe.multi()
            pipe.zadd("market:",item,price)
            pipe.srem(inventory,itemid)
            #如果执行execute方法没有引发WatchError异常，那么说明事务执行成功，并且对包裹键的监视也已经结束。
            pipe.execute()
            return True

        except redis.exceptions.WatchError:
            #用户的包裹已经发生了变化，重试
            pass
    return False